/*
  Key
  相当于控件的ID，只有 Stateful 类型的控件才需要设置
  当一个层级中（比如Column，Row）有几个相同的子组件时，子控件的状态发生了变化，才需要使用Key区分不同的子组件对象

  有两种：
  GlobalKey 全局
  LocalKey 本地，用于同一层级

  LocalKey三个子类：
  ValueKey、ObjectKey 和 UniqueKey
 */

import 'dart:math';

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('Key'),
      ),
      body: HomePage(),
    ),
  ));
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [
          // Box(UniqueKey()),
          // Box(UniqueKey()),
          Box(),
          Box(),
        ],
      ),
    );
  }
}

class Box extends StatefulWidget {

  // Box(Key key):super(key: key)

  @override
  _BoxState createState() => _BoxState();
}

class _BoxState extends State<Box> {

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: (){
        setState(() {});
      },
      child: Container(
        width: 100,
        height: 100,
        color: Colors.primaries[Random().nextInt(Colors.primaries.length)],
      ),
    );
  }
}

